// 该代码在主函数中使用for循环创建了20个线程，然后使用pthread_detach函数将创建出来的线程分离；
// 这些线程都使用相同的线程入口函数threaddeal，该函数的用途是在屏幕上输出一个字符串，
// 用于显示这是当前的线程编号，该编号是由pthrad_create函数的arg参数传递给线程入口参数
//
// 通过运行结果可知，输出字符串的序号为乱序，是因为这些线程彼此之间并不同步，所以会出现序号错误@!!!
//
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>

void *threaddeal(void *res){
	printf("这是第%d个线程!\n", *(int *)res);
	//pthread_exit(NULL);
}

int main(void){

	// 创建count个线程
	int j, count = 20;
	
	pthread_t pthdid;
	
	int err;
	
	for(j=0; j<count; j++){
		err = pthread_create(&pthdid, NULL, threaddeal, (void *)&j);

		if(err != 0){
			printf("第%d个子线程创建失败!\n", j);
			exit(0);
		}

		// 使用detach分离线程, 分离线程时会回收线程stack占用的空间
		err = pthread_detach(pthdid);

		if(err != 0){
			printf("第%d个线程分离失败!\n", j);
			exit(0);
		}

		// 调用pthread_cancle函数来取消线程
		err = pthread_cancel(pthdid);
		if(err != 0){
			printf("第%d个线程取消失败!\n", j);
		}else{
			printf("第%d个线程取消成功!\n", j);
		}
	}

	return 0;
}
